import axios from 'axios'
import Vue from 'vue';

import cookies from 'js-cookie' //引入cookie模块
Vue.prototype.$cookie = cookies //将它放入vue的原型里


const happen = axios.create({ //-----------创建新的axios实例
	baseURL: 'http://192.168.1.54:8080/admin',
	timeout: 5000 //请求超时的间隔
});

happen.interceptors.request.use(config => { // 对发起的请求拦截
	//在发起请求时添加请求头
	config.headers.common['X-Litemall-Admin-Token'] = cookies.get('tokens')
	return config;
}, function(error) {
	// 对请求错误做些什么
	return Promise.reject(error);
});

happen.interceptors.response.use(response => { //响应拦截---对服务器的返回数据进行拦截
	// 对响应数据做点什么
	if (response.data.errno == 501) {
		//令牌刷新
		if (cookies.get('name')) {
			return login(response)
		} else {
			router.push({
				path: "/login"
			})
		}
	}
	return response;
}, function(error) {
	// 对响应错误做点什么
	return Promise.reject(error);
});

async function login(response) { //async函数来将异步的操作同步化
	//在这里程序就会等异步请求的数据回来赋值给res  再继续往下执行
	let res = await happen({ //调用登录接口来获取令牌
		method: 'post', //请求方式
		url: '/auth/login', //请求路径
		data: {
			username: window.decodeURI(window.atob(cookies.get('name'))), //账号
			password: window.decodeURI(window.atob(cookies.get('pass'))) //密码
		}
	})
	// console.log(res)//在这里res保存了登录成功后返回的信息
	if (res.data.errmsg == '成功') {
		let expires = new Date(new Date().getTime() + 0.5 * 60 * 60 * 1000); //设置过期时间
		cookies.set("tokens", res.data.data.token, {
			expires: expires
		}); //重新存储token
		response.config.headers['X-Litemall-Admin-Token'] = res.data.data.token; //重新给请求头添加token
		return await axios(response.config) //重新请求axios
	}
}

export default happen
